package com.t2tierp.pafecf.controller;

import br.com.modelo.R07;
import br.com.modelo.TotalTipoPgto;
import br.com.util.JPAUtil;
import com.t2tierp.pafecf.infra.Biblioteca;
import com.t2tierp.pafecf.view.Caixa;
import java.math.BigDecimal;
import java.util.ArrayList;

public class TotalTipoPagamentoController {

    public void gravaTotaisVenda(ArrayList<TotalTipoPgto> pListaTotalTipoPagamento) {
        try {
            int coo = Integer.valueOf(Caixa.aCBrECF.getNumCOO());
            int ccf = Integer.valueOf(Caixa.aCBrECF.getNumCCF());
            int gnf = Integer.valueOf(Caixa.aCBrECF.getNumGNF());

            for (TotalTipoPgto totalTipoPagamento : pListaTotalTipoPagamento) {
                if (totalTipoPagamento.getNsu() != null) {
                    totalTipoPagamento.getNsu();
                } else {
                    totalTipoPagamento.setNsu(new String());
                }
                if (totalTipoPagamento.getRede() == null) {
                    totalTipoPagamento.setRede(new String());
                }
                if (totalTipoPagamento.getEstorno() == null) {
                    totalTipoPagamento.setEstorno(Character.MIN_VALUE);
                }
                if (totalTipoPagamento.getCartaoDc() == null) {
                    totalTipoPagamento.setCartaoDc(Character.MIN_VALUE);
                }
                totalTipoPagamento.setSerieEcf(Caixa.configuracao.getIdEcfImpressora().getSerie());
                totalTipoPagamento.setCoo(coo);
                totalTipoPagamento.setCcf(ccf);
                totalTipoPagamento.setGnf(gnf);

                String tripa = Caixa.configuracao.getIdEcfImpressora().getSerie()
                        + coo
                        + ccf
                        + gnf
                        + "0";
                totalTipoPagamento.setHashTripa(Biblioteca.MD5String(tripa));
                totalTipoPagamento.setHashIncremento(0);
                JPAUtil.mergeObjeto(totalTipoPagamento);

                //TODO : Esse é o melhor lugar para gerar o R07?
                R07 R07 = new R07();
                try {
                    R07.setCcf(ccf);
                } catch (Throwable t) {
                }
                R07.setMeioPagamento(totalTipoPagamento.getIdEcfTipoPagamento().getDescricao());
                R07.setValorPagamento(totalTipoPagamento.getValor());
                //TODO : Como fazer o controle dos estornos?
                R07.setEstorno('N');
                R07.setValorEstorno(BigDecimal.ZERO);
                RegistroRController RegistroRControl = new RegistroRController();
                RegistroRControl.gravaR07(R07);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

//    public List<TipoPagamento> meiosPagamento(String pDataInicio, String pDataFim, Integer pIdImpressora) {
//        consultaSQL =
//                "SELECT V.DATA_VENDA, M.ID_ECF_IMPRESSORA, P.DESCRICAO, SUM(TP.VALOR) AS TOTAL "
//                + "FROM "
//                + "ECF_VENDA_CABECALHO V, ECF_MOVIMENTO M, ECF_TIPO_PAGAMENTO P, ECF_TOTAL_TIPO_PGTO TP "
//                + "WHERE "
//                + "V.ID_ECF_MOVIMENTO = M.ID AND "
//                + "TP.ID_ECF_VENDA_CABECALHO=V.ID AND "
//                + "TP.ID_ECF_TIPO_PAGAMENTO = P.ID AND "
//                + "M.ID_ECF_IMPRESSORA = " + pIdImpressora + " AND "
//                + "(V.DATA_VENDA BETWEEN '" + pDataInicio + "' and '" + pDataFim
//                + "') GROUP BY "
//                + "P.DESCRICAO,V.DATA_VENDA,M.ID_ECF_IMPRESSORA";
//        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
//        Query q = em.createQuery("FROM TipoPagamento WHERE m.");
//
//        try {
//            List<MeiosPagamentoVO> listaMeiosPagamento = new ArrayList<MeiosPagamentoVO>();
//
//            stm = bd.conectar().createStatement();
//            rs = stm.executeQuery(consultaSQL);
//            rs.beforeFirst();
//            while (rs.next()) {
//                MeiosPagamentoVO meiosPagamento = new MeiosPagamentoVO();
//                meiosPagamento.setDescricao(rs.getString("DESCRICAO"));
//                meiosPagamento.setDataHora(rs.getDate("DATA_VENDA"));
//                meiosPagamento.setTotal(rs.getDouble("TOTAL"));
//                listaMeiosPagamento.add(meiosPagamento);
//            }
//            return listaMeiosPagamento;
//        } catch (Exception e) {
//            e.printStackTrace();
//            return null;
//        }
//    }
}
